package pe.com.hermes.hermetic.web.controller.configuracion;

import pe.com.hermes.hermetic.beans.AuditBean;
import pe.com.hermes.hermetic.errors.ErrorFactory;
import pe.com.hermes.hermetic.negocio.service.HermeticFacade;
import pe.com.hermes.hermetic.negocio.ultil.ConstantesHermetic;
import pe.com.hermes.hermetic.negocio.ultil.Util;
import pe.com.hermes.hermetic.web.controller.base.IController;
import pe.com.hermes.hermetic.web.controller.base.IWebOpciones;
import pe.com.hermes.hermetic.web.forms.HMF5001Form;

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.log4j.Logger;


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.SessionAttributes;


@RequestMapping("/mostrarHWF5001.html")
@Controller
@SessionAttributes(value={"form","codOpci","desOpci"})
public class CambiodeAccesoController implements IController{

        private Logger logger = Logger.getLogger(this.getClass());
        @Autowired
	HermeticFacade servicioHermetic;
        
        
        @RequestMapping(method={RequestMethod.GET})
        protected String showForm(ModelMap model, HttpServletRequest request) throws Exception {

            HttpSession session = request.getSession(false);        
            if (request.getSession().getAttribute("usuario") == null)
                return FORM_SESSION_FINISH;

            List listaTransacciones = (List)session.getAttribute("listaMenu4");
            if (!Util.validaAccesoOpcion(listaTransacciones, ConstantesHermetic.CONFIG_CAMBIO_ACCESO)) {
                return FORM_ACCESS_NULL_VIEW;
            }
           HMF5001Form form = new HMF5001Form();
           form.setControl(ConstantesHermetic.CTE_CONTROL_ACTIVO);
           String codOpci = IWebOpciones.CAMB_ACCESS;
           String desOpci = servicioHermetic.getDesOpci(codOpci, request);
           model.put("codOpci",codOpci);
           model.put("desOpci",desOpci);
           model.put(FORM_KEY,form);
           AuditBean auditBean = new AuditBean(CAMB_ACCESS);
           servicioHermetic.inseAudit(auditBean);
           return FORM_CAMBIO_DE_ACCESO_VIEW;
        }

        @RequestMapping(params={"accion=grabar"})
        private String grabar (ModelMap model,@ModelAttribute(FORM_KEY) HMF5001Form form,BindingResult result, HttpServletRequest request) throws Exception {    
        
            HttpSession session = request.getSession(false);        
            if (request.getSession().getAttribute("usuario") == null)
                return FORM_SESSION_FINISH;

            List listaTransacciones = (List)session.getAttribute("listaMenu2");
            if (!Util.validaAccesoOpcion(listaTransacciones, ConstantesHermetic.CONSUL_SALDO_DE_CUENTA)) {
                return FORM_ACCESS_NULL_VIEW;
            }    
            form.setControl(ConstantesHermetic.CTE_CONTROL_ACTIVO);
            
            //int accionMapa = 1;
            String cliente = (String)request.getSession().getAttribute("cliente");
            String sucursal = (String)request.getSession().getAttribute("sucursal");
            String usuario = (String)request.getSession().getAttribute("usuario");
            //
            String existe = servicioHermetic.existePassword(usuario, cliente);
            String passwordCorrecto = servicioHermetic.validaPassword(usuario, 
                                                       form.getOldPassword(), 
                                                       cliente);
            
            try {


                        if (existe.equals("1") && passwordCorrecto.equals("1")) {
                            String p1 = form.getNewPassword1();
                            String p2 = form.getNewPassword2();
                            if (p1.equals(p2)) {
                                try {
                                      servicioHermetic.actualizaPassword(p1, usuario, 
                                                                             cliente);
                                    /**** Modificado 20090116 JCR *****/
                                    result.addError(new ErrorFactory("accion.ok.cambioacceso"));                                    
                                } catch (Exception e) {
                                    System.out.println(e.getMessage());
                                }
                            } else {
                                /**** Modificado 20090116 JCR *****/
                                 result.addError(new ErrorFactory("accion.ok.clavesNuevasIncorrectas"));                                
                            }

                        } else {
                            result.addError(new ErrorFactory("accion.ok.errorpasswordactual"));                            
                        }
                model.put(FORM_KEY,form);  
            } catch (Exception e) {
                e.printStackTrace();
                //accionMapa = 0;
                return FORM_ERROR_VIEW;
            }

            return FORM_CAMBIO_DE_ACCESO_VIEW;
        }


}
